CentOS7 部署文件服务器
参考
背景知识
FTP是仅基于TCP的服务,不支持UDP。
与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。
大部分FTP客户端默认使用PASV方式。IE默认使用PORT方式。
vsftpd有以下三种认证模式:
匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登陆。
本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来简单。
虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令
验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。
主被动模式另类说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24FTP 主/被动模式的原理:
--------------------------------------------------------------------------------
FTP 是 File Transfer Protocol (文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于 HTTP,FTP 协议要
复杂得多。复杂的原因,是因为 FTP 协议要用到两个 TCP 连接,一个是命令链路,用来在 FTP 客户端与服务器之间传递命令;
另一个是数据链路,用来上传或下载数据。FTP 协议有两种工作方式:PORT 方式和 PASV 方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:
--------------------------------------------------------------------------------
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需
要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的
XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:
--------------------------------------------------------------------------------
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需
要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口
发送连接请求,建立一条数据链路来传送数据。
概括:
--------------------------------------------------------------------------------
主动模式:服务器向客户端敲门,然后客户端开门
被动模式:客户端向服务器敲门,然后服务器开门
所以,如果你是如果通过代理上网的话,就不能用主动模式,因为服务器敲的是上网代理服务器的门,而不是敲客户端的门
而且有时候,客户端也不是轻易就开门的,因为有防火墙阻挡,除非客户端开放大于1024的高端端口
安装 vsftp
安装
1
yum install -y vsftpd
安装 db4,db4-devel,db4-utils
1
yum -y install db4*
备份配置文件
1
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
虚拟用户模式配置
查看如何配置配置文件:
man vsftpd.conf创建用于FTP认证的用户数据库文件
1
2
3
4
5
6
7
8
9
10
11
12
131. vim /etc/vsftpd/vuser.txt
注:第一行用户名,第二行密码,依此类推
sftpadmin
公司通用加强密码
ftpuser2
algoblu@299
2. 明文信息不安全,需要使用db_load命令用哈希(hash)算法将明文信息转换成数据文件,然后将明文信息文件删除。
# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
# chmod 600 /etc/vsftpd/vuser.db
# rm -f /etc/vsftpd/vuser.txt创建虚拟用户映射的系统本地用户和 FTP 根目录
1
2
3
4
5
6useradd -d /home/vftp -s /sbin/nologin vftp
chmod -Rf 755 /home/vftp/
映射用户:vftp
FTP 根目录:/home/vftp
不允许shell登录:/sbin/nologin建立用于支持虚拟用户的 PAM 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
181. 新建一个用于虚拟用户认证的 PAM 文件 vsftpd.pam,其中 PAM 文件内的 “db=”
参数为使用 db_load 命令生成的账户密码数据文件的路径,但不用写数据文件的后缀。
vuser.db
vim /etc/pam.d/vsftpd.pam
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
2. 为两个虚拟用户设置不同的权限,ftpuser1 拥有所有权限,而 ftpuser2 只有读取权限。
mkdir /etc/vsftpd/vusers_dir
vim /etc/vsftpd/vusers_dir/sftpadmin
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim /etc/vsftpd/vusers_dir/ftpuser2 只有读取权限,只创建文件,限定目录,不作其他配置
local_root=/home/vftp/Algoblu/ # 限定 ftpuser2 访问的根目录为 /home/vftp/Algoblu/ ,默认为 /home/vftp/修改配置文件,删除之前的匿名模式配置内容,带注释
#的是需要修改和新增的配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO # 不允许匿名登录
anon_umask=022
local_enable=YES
guest_enable=YES # 开启虚拟用户模式
guest_username=vftp # 指定虚拟用户对应的系统用户
allow_writeable_chroot=YES # 允许对 FTP 根目录执行写入操作
write_enable=YES
local_umask=022
local_root=/home/vftp # 指定根目录
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen_port=2231
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.pam # 指定 PAM 文件
userlist_enable=YES # -- 不允许 userlist 中的用户连接
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir # 指定虚拟用户配置文件目录
pasv_min_port=45000
pasv_max_port=49000
配置解释
# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=no //禁用匿名用户登录
(anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022 //指定上传权限掩码)
local_enable=YES //需映射本地用户,所以启用些项
write_enable=YES //启用上传写入支持
chroot_local_user=YES //(自建配置)将所有本地用户限制在家目录中
guest_enable=YES //启用映射功能
guest_username=tom //指定映射的系统用户名称
pam_service_name=juser.pam //指定新的PAM认证文件
user_config_dir=/opt/vsftpd/juser_dir //(自建配置)设置虚拟帐号的主目录为/juser_dir
max_clients=300 //(自建配置)设置FTP服务器最大接入客户端数为300个
max_per_ip=10 //(自建配置)设置每个IP地址最大连接数为10个
listen=YES
port_enable=NO //(自建配置)取消PORT模式进行数据传输
connect_from_port_20=NO //(修改配置)PORT模式进行数据传输部使用20端口
ftp_data_port=20
pasv_enable=YES //(自建配置)允许PASV模式进行数据传输
pasv_min_port=65341 //(自建配置)PASV模式下数据传输所使用port范围下界
pasv_max_port=65351 //(自建配置)PASV模式下数据传输所使用port范围上界重启
vsftpd服务1
systemctl restart vsftpd
配置防火墙
1 | firewall-cmd --zone=public --add-port=2231/tcp --permanent |
配置自启动服务
命令行输入
setup选择
System services选择对应的服务即可
测试
查看线程是否存在:ps aux | grep vsftpd
查看监听的端口:netstat -tlunp
使用FTP 工具 Filezilla 访问服务器
使用 Windows 建立网络位置:
- 计算机 -> 网络位置 -> 右键,添加一个网络位置 -> 选择自定义网络位置 ->
- -> Internet 地址或者网络地址:ftp://192.168.100.12:2231
- -> 取消匿名登录 -> 输入用户名 -> 取一个名称 …
常见问题
错误:读取目录列表失败
- 解决:参见防火墙配置
上传文件失败
- 检查目录是否有写权限
- 检查登录的账户是否有写权限
SFTP连接时很慢
- 因为默认开启了reverse_lookup(反向解析)
- man vsftpd.conf :
reverse_lookup_enable - 默认为 YES, 在
/etc/vsftpd/vsftpd.conf中天加1
reverse_lookup_enable=NO



